import java.util.*;
public class Practice1{
    //https://ac.nowcoder.com/acm/contest/71300
    //第F的题目, 考察到素数和dfs的运用, 从数据量可以看出使用dfs, 数据量不大

    //一些全局的变量的定义
    static int min;//存储最小值
    static int path;//路径元素, 也可以设置成局部变量(有时候局部变量速度会更快)
    static int[] arr;
    static int n;
    static Set<Integer> set;//存储素数
    static boolean[] vis;//防止重复元素
    public static void main(String[] args){
        //找出素数, 为素因子判断先做准备
        boolean[] prime = new boolean[1001];
        vis = new boolean[1001];
        set = new HashSet<>();
        for(int i = 2;i < 1001;i++){
            if(!prime[i]){
                set.add(i);
                for(int j = i * i;j < 1001;j += i){
                    prime[j] = true;
                }
            }
        }
        Scanner sc = new Scanner(System.in);
        min = Integer.MAX_VALUE;
        path = 0;
        n = sc.nextInt();
        arr = new int[n];
        for(int i = 0;i < n;i++){
            arr[i] = sc.nextInt();
        }
        dfs(0);
        System.out.println(min == Integer.MAX_VALUE ? -1 : min);
    }
    public static void dfs(int pos){
        if(pos == n){
            min = Math.min(min,path);
            return;
        }
        for(int i = 2;i <= arr[pos];i++){
            if(arr[pos] % i == 0 && set.contains(i) && !vis[i]){
                path += i;
                vis[i] = true;
                dfs(pos + 1);
                path -= i;
                vis[i] = false;
            }
        }
    }
}